#include<bits/stdc++.h>
#include<windows.h>
#define LL long long
using namespace std;
const LL MAXN=8005;
LL n,Q;
struct node{
	LL sum;
	LL num,rank;
	LL next,last;
}a[MAXN],b1[MAXN];
struct ts{
	LL val;
	LL ber;	
}b[MAXN];
bool cmp(ts x,ts y){
	if(x.val<y.val)return true;
	else return x.ber<y.ber;
}
bool cmp1(node x,node y){
	if(x.sum<y.sum)return true;
	else return x.num<y.num;
}
int main(){
	freopen("sort.in","r",stdin);
	freopen("sort.out","w",stdout);
	scanf("%lld%lld",&n,&Q);
	if(n<=1500&&Q<=1500){
		for(LL i=1;i<=n;i++){
			scanf("%lld",&a[i].sum);
			a[i].num=i;
			b1[i]=a[i];
		}
		while(Q--){
			LL did,x,y;
			scanf("%lld",&did);
			if(did==1){
				scanf("%lld%lld",&x,&y);
				a[x].sum=y;
			}
			else{
				scanf("%lld",&x);
				for(int i=1;i<=n;i++)b1[i]=a[i];
				sort(b1+1,b1+1+n,cmp1);
				for(LL i=1;i<=n;i++)
					a[b1[i].num].rank=i;
				printf("%lld\n",a[x].rank);
			}
		}
		return 0;
	}
	else{	
		for(LL i=1;i<=n;i++){
			scanf("%lld",&a[i].sum);
			b[i].val=a[i].sum;
			b[i].ber=a[i].num=i;
		}
		sort(b+1,b+1+n,cmp);
		b[0].ber=b[n+1].ber=-1;
		for(LL i=1;i<=n;i++){
			a[b[i].ber].rank=i;
			a[b[i].ber].next=b[i+1].ber;
			a[b[i].ber].last=b[i-1].ber;
		}
		
		while(Q--){
			LL did,x;
			LL y;
			scanf("%lld",&did);
			/*
			for(LL i=1;i<=n;i++){
				prLLf("%d ",a[i].sum);
			}
			prLLf("\n");
			for(LL i=1;i<=n;i++){
				prLLf("%d ",a[i].rank);
			}
			prLLf("\n");
			*/
			if(did==1){
				scanf("%lld%lld",&x,&y);
				if(y>a[x].sum){
					LL now=a[x].next;
					a[x].sum=y;
					while(now!=-1&&y>=a[now].sum){
						if(a[x].sum==a[now].sum){
							if(a[x].num>a[now].num)a[now].rank--,a[x].rank++;
							else break;
						}
						else a[now].rank--,a[x].rank++;
						
						a[a[x].last].next=a[now].num;
						a[now].last=a[a[x].last].num;
						
						a[x].last=a[now].num;
						a[x].next=a[a[now].next].num;
						
						int Tnow=now;
						now=a[now].next;
						a[Tnow].next=a[x].num;
					}
				}
				else if(y<a[x].sum){
					LL now=a[x].last;
					a[x].sum=y;
					while(now!=-1&&y<=a[now].sum){
					//	prLLf("-1\n");
						if(a[x].sum==a[now].sum){
							if(a[x].num<a[now].num)a[now].rank++,a[x].rank--;
							else break;
						}
						else a[now].rank++,a[x].rank--;
						
						a[a[x].next].last=a[now].num;
						a[now].next=a[a[x].next].num;
						
						
						a[x].next=a[now].num;
						a[x].last=a[a[now].last].num;
						
						int Tnow=now;
						now=a[now].last;
						a[Tnow].last=a[x].num;
					}
				}
				for(int i=1;i<=n;i++){
					if(a[i].last==0)a[i].last=-1;
					if(a[i].next==0)a[i].next=-1;
				}		
			}
			else{
				scanf("%lld",&x);
				printf("%lld\n",a[x].rank);
			}
	//		printf("\n");
	//		printf("sum:");
	//		for(int i=1;i<=n;i++){
	//			printf("%d ",a[i].sum);
	//		}
	//		printf("\n");
	//		printf("rank:");
	//		for(int i=1;i<=n;i++){
	//			printf("%d ",a[i].rank);
	//		}
	//		printf("\n");
	//		printf("next:");
	//		for(int i=1;i<=n;i++){
	//			printf("%d ",a[i].next);
	//		}
	//		printf("\n");
	//		printf("last:");
	//		for(int i=1;i<=n;i++){
	//			printf("%d ",a[i].last);
	//		}
	//		printf("\n");
		}
	}

		
	
	
	return 0;
}

